package com.dhcc.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;

/**
 * @ClassName: Stream_01
 * @Description: 初玩Stream,中间方法
 * @author weiyongpeng
 * @date 2023年5月7日 下午3:11:47
 */
public class Stream_06 {
	public static <T> void main(String[] args) {
		/**
		 * 流里面的中间方法
		 * filter过滤
		 * limit获取某个元素
		 * skip跳过某个元素
		 * distinct去重
		 * concat合并两个流
		 * map转换六种的数据类型
		 * 
		 * 注意：中间方法，返回新的Stream流，原来的Stream流只能使用一次，建议使用链式编程
		 * 		修改Stream流中的数据，不会影响原来集合或者数组的数据
		 */
		Stream<Integer> stream = Arrays.asList(1,2,3,4,5,6,7).stream();
//		stream.filter(i->i==2).forEach(s->System.out.println(s));
		ArrayList<String> list = new ArrayList<String>();
		Collections.addAll(list,"主张三", "李四","王五","李老头","张三", "孙老七","张三");
		
		Stream<String> stream2 = list.stream();
//		stream2.filter(new Predicate<String>() {
//
//			@Override
//			public boolean test(String t) {
//				// TODO Auto-generated method stub
//				return t.startsWith("张");
//			}
//			
//		}).forEach(System.out::println);
		System.out.println("--------------------------");
		// limit截取几个元素
//		stream.limit(3).forEach(s->System.out.println(s));
//		System.out.println("--------------------------");
		// 跳过几个元素
//		stream.skip(3).forEach(s->System.out.println(s));
		System.out.println("--------------------------");
		// 获取从中间三个
//		stream.skip(3).limit(3).forEach(s->System.out.println(s));
//		stream.limit(6).skip(3).forEach(s->System.out.println(s));
		
		// distinct去重
//		stream2.distinct().forEach(s->System.out.println(s));
		
		// concat两个流
//		Stream.concat(stream, stream2).forEach(s->System.out.println(s));
		
		// 类型转换map
		List<String> lists = new ArrayList<>();
		Collections.addAll(lists, "张无忌-12","周芷若-14","黄老邪-34","张三-21");
		Stream<String> stream3 = lists.stream();
//		stream3.map(new Function<String, Integer>(){
//
//			@Override
//			public Integer apply(String t) {
//				// TODO Auto-generated method stub
//				int age = Integer.parseInt(t.split("-")[1]);
//				return age;
//			}
//			
//		}).forEach(s->System.out.println(s+"-"+s.TYPE));
		
		// 改写为lambda表达式
		stream3.map(s->{
			return Integer.parseInt(s.split("-")[1]);
		}).forEach(s->System.out.println("年龄是="+s+"--数据类型是："+s.TYPE));
	}
}
